iT邦幫忙

2024 iThome 鐵人賽

DAY 17
1

上篇主要介紹 dbt state 的用法,此篇會介紹 dbt state 所需的 manifest 檔案是如何產生

如何產生 manifest

可以使用 dbt compile 或 dbt parse 來產生 manifest。兩者的主要區別在於是否將 models 中的 SQL code 轉換為可執行的 SQL code(compile 會執行轉換,parse 則不會)。parse 不進行編譯,因此執行時間較短。我們團隊為了縮短 CI 時間,同時考慮到 parse 足以判斷 models 是否有改變,因此選擇使用 parse 來生成 manifest。

使用 dbt state 時需要產生兩個 manifest 檔案。如果使用 dbt parse,manifest 預設會存放在 target 資料夾中。為了分別存儲兩個 manifest,需要在 parse 指令後指定不同的資料夾路徑。以下是範例指令:

dbt parse --target base # 建立在 base 資料夾下

撈取異動 models

結合上面所介紹的 dbt state 和產生 manifest 的指令,就能在 CI/CD 中撈取異動的 models,以下完整介紹整個流程:

  1. 先切到異動前的 commit:因為要產生 base manifest 後續來做比較,需要找出當前分支和主分支共同的祖先 commit,並切到該 commit,指令如下

    # CI 階段
    git checkout $(git merge-base HEAD master)
    # CD 階段
    git checkout HEAD~1
    
  2. 產生 base manifest:透過 dbt parse 產生 manifest,並存在 base 資料夾

    dbt parse --target-path base
    
  3. 切回原本 commit:切回當前分支最新的 commit

    git checkout -
    
  4. 產生 target manifest:透過 dbt parse 產生 manifest,並存在 target 資料夾

    dbt parse --target-path target
    
  5. dbt run 異動 models

    # CI:測試環境
    dbt build --select '@state:modified' --state base --target-path target
    # CD:正式環境
    

透過本篇介紹的指令就能在 CI/CD 時識別有異動的 models,接下來會介紹為何在執行 dbt model 前要先進行 dry-run,以及如何實作。

參考


上一篇
dbt state(上)
下一篇
dbt dry run
系列文
dbt 修煉之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言